/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ufes.pss.exercicioSwingBanco.presenter;

import edu.ufes.pss.exercicioSwingBanco.factory.DaoDiretorFactory;
import edu.ufes.pss.exercicioSwingBanco.interfaces.DaoInterface;
import edu.ufes.pss.exercicioSwingBanco.model.Diretor;
import edu.ufes.pss.exercicioSwingBanco.view.DefinirRegionaisDiretorView;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author OdairJT
 */
public class DefinirRegionaisDiretorPresenter {

    private DefinirRegionaisDiretorView view;
    private DefaultTableModel modelo;
    private Diretor diretor;

    public DefinirRegionaisDiretorPresenter(Diretor pDiretor) {

        this.view = new DefinirRegionaisDiretorView();
        this.diretor = pDiretor;

        loadCmbRegioes();
        loadTblRegionais();
        addListenerBtnAdicionar();
        addListenerBtnExcluir();
        addListenerBtnFechar();

        this.view.setLocationRelativeTo(null);
        this.view.setVisible(true);

    }

    private void loadCmbRegioes() {


        this.view.getCmbEstados().removeAllItems();

        Object[] ufs = new Object[]{" ",
            "AC", "AL", "AP", "AM", "BA", "CE", "DF",
            "ES", "GO", "MA", "MT", "MS", "MG", "PR",
            "PB", "PA", "PE", "PI", "RJ", "RN", "RS",
            "RO", "RR", "SC", "SE", "SP", "TO"};

        for (int i = 0; i < ufs.length; i++) {
            this.view.getCmbEstados().addItem(ufs[i]);
        }

        ArrayList<String> regionais = (ArrayList<String>) this.diretor.getRegionais();

        if (regionais != null) {
            for (int i = 0; i < regionais.size(); i++) {
                this.view.getCmbEstados().removeItem(regionais.get(i));
            }
        }

    }

    public final void loadTblRegionais() {
        this.modelo = new DefaultTableModel(new Object[]{"REGIONAIS DE " + this.diretor.getNome().toUpperCase()}, 0) {
            @Override
            public boolean isCellEditable(int rowIndex, int mColIndex) {
                return false;
            }
        };

        this.view.getTblRegiaoEstado().setModel(modelo);
        this.view.getTblRegiaoEstado().setSelectionMode(0);
        this.view.getTblRegiaoEstado().setShowGrid(true);
        this.view.getTblRegiaoEstado().setBackground(Color.LIGHT_GRAY);
        this.view.getTblRegiaoEstado().setForeground(Color.BLUE);

        /* O padrão factory retorna a instância de acordo com a forma 
         * de persistencia selecionada
         */

        ArrayList<String> regionais = (ArrayList<String>) this.diretor.getRegionais();

        if (regionais != null) {
            for (int i = 0; i < regionais.size(); i++) {
                this.modelo.addRow(new Object[]{regionais.get(i)});
            }
        }

    }

    private void addListenerBtnAdicionar() {
        this.view.getBtnAdicionar().addActionListener(
                new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                actionPerformedBtnAdicionar();
            }
        });
    }

    private void actionPerformedBtnAdicionar() {

        ArrayList<String> regionais = (ArrayList<String>) this.diretor.getRegionais();

        if (regionais == null) {
            regionais = new ArrayList<String>();
        }
        
        String uf = "";

        if(this.view.getCmbEstados().getSelectedItem() != null){
            uf = this.view.getCmbEstados().getSelectedItem().toString();
        }

        if (!uf.equals(" ")) {
            regionais.add(uf);
            this.view.getCmbEstados().removeItem(this.view.getCmbEstados().getSelectedItem());

            this.diretor.setRegionais(regionais);

            DaoInterface p = DaoDiretorFactory.CriarDaoDiretor(1);

            if (p.salvarOuAtualizar(diretor)) {
                this.modelo.addRow(new Object[]{uf});
            }
        }

    }

    private void addListenerBtnExcluir() {
        this.view.getBtnExcluir().addActionListener(
                new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                actionPerformedBtnExcluir();
            }
        });
    }

    private void actionPerformedBtnExcluir() {

        if (this.view.getTblRegiaoEstado().getSelectedRow() != -1) {

            ArrayList<String> regionais = (ArrayList<String>) this.diretor.getRegionais();

            if (regionais == null) {
                regionais = new ArrayList<String>();
            }

            String uf = (String) this.view.getTblRegiaoEstado().getValueAt(
                    this.view.getTblRegiaoEstado().getSelectedRow(), 0);

            regionais.remove(uf);
            this.diretor.setRegionais(regionais);

            DaoInterface p = DaoDiretorFactory.CriarDaoDiretor(1);

            if (p.salvarOuAtualizar(diretor)) {
                this.loadCmbRegioes();
                this.loadTblRegionais();
            }


        } else {
            this.view.showMessage("Selecione uma linha para continuar!");
        }

    }

    private void addListenerBtnFechar() {
        this.view.getBtnFechar().addActionListener(
                new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                actionPerformedBtnFechar();
            }
        });
    }

    private void actionPerformedBtnFechar() {
        ListaDiretorPresenter listaDiretorPresenter = new ListaDiretorPresenter();
        this.view.dispose();
    }
}
